<?php
/**
 * Created by PhpStorm.
 * User: Thanh Lâm
 * Date: 5/2/14
 * Time: 1:23 PM
 */
namespace Phalconvn\Auth;
use Apps\Backend\Models\Users;
use Phalcon\Mvc\User\Component;
use Apps\Backend\Models\FailedLogins;

class Auth extends Component{
    /**
     * Checks the user credentials
     *
     * @param array $credentials
     * @return boolan
     */
    public function check($credentials){
        $user = Users::findFirstByUsername($credentials['username']);
        if ($user == false) {
            $countError = $this->registerUserThrottling(0);
            return array('error'=>'true',
                'message'=>'Username này không tồn tại',
                'count'=>$countError);
        }
        // Check the password
        if (!$this->seo->checkHash($credentials['password'], $user->password)) {
            $countError =  $this->registerUserThrottling($user->id);
            return array('error'=>'true',
                'message'=>'Mật khẩu không đúng',
                'count'=>$countError);
        }
        // Check if the user was flagged
        $check = $this->checkUserFlags($user);
        if($check['error']!=null)
            return $check;

        //luu thông tin users vao session
        $this->session->set('auth-identity', array(
            'id' => $user->id,
            'email' => $user->email,
            'name' => $user->name,
            'lastLogin' => $user->visited_date,
            'group_admin' => $user->group_admin,
            'address' => $user->address
        ));


        return array('error'=>"false");
    }
    //user dang nhap sai email và password
    public function registerUserThrottling($userId){
        $failedLogin = new FailedLogins();
        $failedLogin->created_by = $userId;
        $failedLogin->ip_address = $this->request->getClientAddress();
        $failedLogin->attempted = time();
        $failedLogin->save();
        $attempts = FailedLogins::count(array('ip_address = ?0 AND attempted >= ?1',
            'bind' => array($this->request->getClientAddress(),time() - 3600 * 6)));
        switch ($attempts) {
            case 1:
            case 2:
                // no delay
                break;
            case 3:
            case 4:
                sleep(2);
                break;
            default:
                sleep(4);
                break;
        }
        return $attempts;
    }


    //get thông tin user login
    public function getInfo(){
        return (object) $this->session->get('auth-identity');
    }
    public function checkUserFlags(Users $user){
        if ($user->status == 0)
            return array('error'=>'true',
                'message'=>'Tài khoản cua bạn chưa được kích hoạt',
                'count'=>4);
        if ($user->status == 3)
            return array('error'=>'true',
                'message'=>'Tài khoản của bạn tạm thời bị khóa',
                'count'=>4);
        if ($user->login_attempts == 1)
            return array('error'=>'true',
                'message'=>'Tài khoản của bạn khoá',
                'count'=>4);
        /* if($user->group->name == 'Member')
             return array('error'=>true,
                           'message'=>'Tài kho?n c?a b?n không có quy?n truy c?p',
                          'count'=>4);*/
    }
    //tao ma luu cookie user ??ng nh?p

    public function getIdentity(){
        return $this->session->get('auth-identity');
    }


}
